package SGI.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;


import SGI.Excepcion.DAOExcepcion;
import SGI.Modelo.Idea;
import SGI.Modelo.InvitadoIdea;
import SGI.Modelo.Usuario;
import SGI.Util.ConexionBD;


public class DaoInvitadoIdea extends BaseDAO {
	
	//****************** PAREDES CARBONEL, ALEXIS - HU 05 ******************//
	public InvitadoIdea insertar(InvitadoIdea vo) throws DAOExcepcion {
		String query = "INSERT INTO InvitadoIdea (IdUsuario, IdIdea, votacion) VALUES (?, ?, ?);";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getUsuario().getIdUsuario());
			stmt.setInt(2, vo.getIdea().getIdIdea());
			stmt.setInt(3, vo.getVotacion());
			System.out.println("vo.getUsuario().getIdUsuario() = " + vo.getUsuario().getIdUsuario());
			System.out.println("vo.getIdea().getIdIdea() = " + vo.getIdea().getIdIdea());
			System.out.println("vo.getVotacion() = " + vo.getVotacion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			System.out.println("...");
			vo.setIdInvitadoIdea(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public void eliminar(int Id) throws DAOExcepcion {
		String query = "delete from InvitadoIdea WHERE idInvitadoIdea = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, Id);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}


	public Collection<InvitadoIdea> buscarInvitadoIdea(int IdIdea) throws DAOExcepcion {
		Collection<InvitadoIdea> c = new ArrayList<InvitadoIdea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT ii.IdInvitadoIdea , concat(nombre, ' ',paterno, ' ', materno) as Usuario, i.titulo " + 
			"FROM InvitadoIdea ii " + 
			"INNER JOIN Usuario u on ii.IdUsuario = u.IdUsuario " +
			"INNER JOIN Idea i on i.IdIdea = ii.IdIdea " +
			"WHERE i.IdIdea = ?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdIdea);
			rs = stmt.executeQuery();
			while (rs.next()) {
				InvitadoIdea vo = new InvitadoIdea();
				Usuario u = new Usuario();
				Idea i = new Idea();
				
				vo.setIdInvitadoIdea(rs.getInt("IdInvitadoIdea"));
				
				u.setNombre(rs.getString("Usuario"));
				vo.setUsuario(u);
				
				i.setTitulo(rs.getString("titulo"));
				vo.setIdea(i);

				c.add(vo);
			}
	
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public InvitadoIdea obtenerInvitadoIdea(int IdIdea) throws DAOExcepcion {
		InvitadoIdea vo = new InvitadoIdea();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT ii.IdInvitadoIdea , concat(nombre, ' ',paterno, ' ', materno) as Usuario, i.titulo " + 
			"FROM InvitadoIdea ii " + 
			"INNER JOIN Usuario u on ii.IdUsuario = u.IdUsuario " +
			"INNER JOIN Idea i on i.IdIdea = ii.IdIdea " +
			"WHERE ii.IdInvitadoIdea = ?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdIdea);
			rs = stmt.executeQuery();
			
			if (rs.next()) {
				Usuario u = new Usuario();
				Idea i = new Idea();
				
				vo.setIdInvitadoIdea(rs.getInt("IdInvitadoIdea"));
				u.setNombre(rs.getString("Usuario"));
				vo.setUsuario(u);
				
				i.setTitulo(rs.getString("titulo"));
				vo.setIdea(i);

			}
			
	
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}
